// ==LICENSE-BEGIN==
// Copyright 2017 European Digital Reading Lab. All rights reserved.
// Licensed to the Readium Foundation under one or more contributor license agreements.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file exposed on Github (readium) in the project repository.
// ==LICENSE-END==

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck

export const transliteratesDifferentLengthsLower = {
    "ß": "ss",
    "æ": "ae",
    "þ": "th",
    "ث": "th",
    "خ": "kh",
    "ذ": "dh",
    "ش": "sh",
    "غ": "gh",
    "َ‎": "a",
    "ِ‎": "i",
    "چ": "ch",
    "ژ": "zh",
    "ۍ": "ai",
    "ж": "zh",
    "ц": "cz",
    "ч": "ch",
    "ш": "sh",
    "щ": "shh",
    "ю": "yu",
    "я": "ya",
    "ё": "yo",
    "ե": "ye",
    "ժ": "zh",
    "խ": "kh",
    "ծ": "ts",
    "ձ": "dz",
    "շ": "sh",
    "ո": "vo",
    "չ": "ch",
    "ր": "re",
    "ց": "ts",
    "ու": "u",
    "և": "yev",
    "ჟ": "zh",
    "ფ": "ph",
    "ღ": "gh",
    "შ": "sh",
    "ჩ": "ch",
    "ც": "ts",
    "ძ": "dz",
    "წ": "ts",
    "ჭ": "tch",
    "ხ": "kh",
    "ށ": "sh",
    "ޅ": "lh",
    "ދ": "dh",
    "ތ": "th",
    "ޏ": "gn",
    "ޗ": "ch",
    "ޘ": "tt",
    "ޙ": "hh",
    "ޚ": "kh",
    "ޛ": "th",
    "ޝ": "sh",
    "ޣ": "gh",
    "ާ": "aa",
    "ީ": "ee",
    "ޫ": "oo",
    "ޭ": "ey",
    "ޯ": "oa",
    "θ": "th",
    "ξ": "ks",
    "ψ": "ps",
    "ќ": "kj",
    "љ": "lj",
    "њ": "nj",
    "є": "ye",
    "ї": "yi",
    "ꜻ": "av",
    "œ": "oe",
    "ȣ": "ou",
    "ƣ": "oi",
    "ᵫ": "ue",
    "ꝸ": "um",
    "ᴔ": "oe",
    "ᴂ": "ae",
    "ᵺ": "th",
    "ꝭ": "is",
    "ƕ": "hv",
    "ǆ": "dz",
    "ꝫ": "et",
} as { [str: string]: string };

export const transliteratesDifferentLengthsUpper = {
    "Æ": "AE",
    "Þ": "TH",
    "ẞ": "SS",
    "Ж": "Zh",
    "Ц": "Cz",
    "Ч": "Ch",
    "Ш": "Sh",
    "Щ": "Shh",
    "Ю": "Yu",
    "Я": "Ya",
    "Ё": "Yo",
    "Θ": "TH",
    "Ξ": "KS",
    "Ψ": "PS",
    "Ќ": "Kj",
    "Љ": "Lj",
    "Њ": "Nj",
    "Є": "Ye",
    "Ї": "Yi",
    "Ꜻ": "AV",
    "Ǆ": "DZ",
    "Ꝫ": "ET",
    "Ꝭ": "IS",
    "Ƣ": "OI",
    "Œ": "OE",
    "ᴁ": "AE",
    "Ȣ": "OU",
    "ɶ": "OE",
    "ᴕ": "OU",
} as { [str: string]: string };

export const transliteratesSameLengths = {
    "ـ": "_",
    "٠": "0",
    "١": "1",
    "٢": "2",
    "٣": "3",
    "٤": "4",
    "٥": "5",
    "٦": "6",
    "٧": "7",
    "٨": "8",
    "٩": "9",
    "۰": "0",
    "۱": "1",
    "۲": "2",
    "۳": "3",
    "۴": "4",
    "۵": "5",
    "۶": "6",
    "۷": "7",
    "۸": "8",
    "۹": "9",
    // https://github.com/sindresorhus/transliterate/blob/f4a527f5e8fa6dc7c2142c3125b594cfa3f0d0c2/index.js#L60-L61
    // .replace(/\p{Dash_Punctuation}/gu, '-')
    "–": "-",
    "—": "-",
    "−": "-",
    "‒": "-",
} as { [str: string]: string };

export const transliteratesSameLengthsLower = {
    "ð": "d",
    "ø": "o",
    "đ": "d",
    "ء": "e",
    "آ": "a",
    "أ": "a",
    "ؤ": "w",
    "إ": "a",
    "ئ": "y",
    "ا": "a",
    "ب": "b",
    "ة": "t",
    "ت": "t",
    "ج": "j",
    "ح": "h",
    "د": "d",
    "ر": "r",
    "ز": "z",
    "س": "s",
    "ص": "s",
    "ض": "d",
    "ط": "t",
    "ظ": "z",
    "ع": "e",
    "ف": "f",
    "ق": "q",
    "ك": "k",
    "ل": "l",
    "م": "m",
    "ن": "n",
    "ه": "h",
    "و": "w",
    "ى": "a",
    "ي": "y",
    "ُ": "u",
    "ک": "k",
    "گ": "g",
    "پ": "p",
    "ی": "y",
    "ټ": "p",
    "ځ": "z",
    "څ": "c",
    "ډ": "d",
    "ﺫ": "d",
    "ﺭ": "r",
    "ړ": "r",
    "ﺯ": "z",
    "ږ": "g",
    "ښ": "x",
    "ګ": "g",
    "ڼ": "n",
    "ۀ": "e",
    "ې": "e",
    "ٹ": "t",
    "ڈ": "d",
    "ڑ": "r",
    "ں": "n",
    "ہ": "h",
    "ھ": "h",
    "ے": "e",
    "а": "a",
    "б": "b",
    "в": "v",
    "г": "g",
    "д": "d",
    "е": "e",
    "з": "z",
    "и": "i",
    "й": "j",
    "к": "k",
    "л": "l",
    "м": "m",
    "н": "n",
    "о": "o",
    "п": "p",
    "р": "r",
    "с": "s",
    "т": "t",
    "у": "u",
    "ф": "f",
    "х": "h",
    "ы": "y",
    "э": "e",
    "ı": "i",
    "ա": "a",
    "բ": "b",
    "գ": "g",
    "դ": "d",
    "զ": "z",
    "է": "e",
    "ը": "u",
    "թ": "t",
    "ի": "i",
    "լ": "l",
    "կ": "k",
    "հ": "h",
    "ղ": "r",
    "ճ": "j",
    "մ": "m",
    "յ": "j",
    "ն": "n",
    "պ": "p",
    "ջ": "j",
    "ռ": "r",
    "ս": "s",
    "վ": "v",
    "տ": "t",
    "ւ": "v",
    "փ": "p",
    "ք": "q",
    "օ": "o",
    "ֆ": "f",
    "ა": "a",
    "ბ": "b",
    "გ": "g",
    "დ": "d",
    "ე": "e",
    "ვ": "v",
    "ზ": "z",
    "თ": "t",
    "ი": "i",
    "კ": "k",
    "ლ": "l",
    "მ": "m",
    "ნ": "n",
    "ო": "o",
    "პ": "p",
    "რ": "r",
    "ს": "s",
    "ტ": "t",
    "უ": "u",
    "ქ": "q",
    "ყ": "k",
    "ჯ": "j",
    "ჰ": "h",
    "ހ": "h",
    "ނ": "n",
    "ރ": "r",
    "ބ": "b",
    "ކ": "k",
    "އ": "a",
    "ވ": "v",
    "މ": "m",
    "ފ": "f",
    "ލ": "l",
    "ގ": "g",
    "ސ": "s",
    "ޑ": "d",
    "ޒ": "z",
    "ޓ": "t",
    "ޔ": "y",
    "ޕ": "p",
    "ޖ": "j",
    "ޜ": "z",
    "ޞ": "s",
    "ޟ": "d",
    "ޠ": "t",
    "ޡ": "z",
    "ޢ": "a",
    "ޤ": "q",
    "ޥ": "w",
    "ަ": "a",
    "ި": "i",
    "ު": "u",
    "ެ": "e",
    "ޮ": "o",
    "α": "a",
    "β": "v",
    "γ": "g",
    "δ": "d",
    "ε": "e",
    "ζ": "z",
    "η": "i",
    "ι": "i",
    "κ": "k",
    "λ": "l",
    "μ": "m",
    "ν": "n",
    "ο": "o",
    "π": "p",
    "ρ": "r",
    "σ": "s",
    "τ": "t",
    "υ": "y",
    "φ": "f",
    "χ": "x",
    "ω": "o",
    "ά": "a",
    "έ": "e",
    "ί": "i",
    "ό": "o",
    "ύ": "y",
    "ή": "i",
    "ώ": "o",
    "ς": "s",
    "ϊ": "i",
    "ΰ": "y",
    "ϋ": "y",
    "ΐ": "i",
    // "тс": "ts",
    "ł": "l",
    "і": "i",
    "ґ": "g",
    "ё": "e",
    "ќ": "k",
    "ї": "i",
    "ᶏ": "a",
    "ẚ": "a",
    "ⱥ": "a",
    "ɓ": "b",
    "ᵬ": "b",
    "ᶀ": "b",
    "ƀ": "b",
    "ƃ": "b",
    "ɵ": "o",
    "ɕ": "c",
    "ƈ": "c",
    "ȼ": "c",
    "ȡ": "d",
    "ɗ": "d",
    "ᶑ": "d",
    "ᵭ": "d",
    "ᶁ": "d",
    "ɖ": "d",
    "ƌ": "d",
    "ȷ": "j",
    "ɟ": "j",
    "ʄ": "j",
    "ⱸ": "e",
    "ᶒ": "e",
    "ɇ": "e",
    "ƒ": "f",
    "ᵮ": "f",
    "ᶂ": "f",
    "ɠ": "g",
    "ᶃ": "g",
    "ǥ": "g",
    "ⱨ": "h",
    "ɦ": "h",
    "ħ": "h",
    "ᶖ": "i",
    "ɨ": "i",
    "ꝺ": "d",
    "ꝼ": "f",
    "ᵹ": "g",
    "ꞃ": "r",
    "ꞅ": "s",
    "ꞇ": "t",
    "ʝ": "j",
    "ɉ": "j",
    "ⱪ": "k",
    "ꝃ": "k",
    "ƙ": "k",
    "ᶄ": "k",
    "ꝁ": "k",
    "ꝅ": "k",
    "ƚ": "l",
    "ɬ": "l",
    "ȴ": "l",
    "ⱡ": "l",
    "ꝉ": "l",
    "ŀ": "l",
    "ɫ": "l",
    "ᶅ": "l",
    "ɭ": "l",
    "ſ": "s",
    "ẜ": "s",
    "ẝ": "s",
    "ɱ": "m",
    "ᵯ": "m",
    "ᶆ": "m",
    "ȵ": "n",
    "ɲ": "n",
    "ƞ": "n",
    "ᵰ": "n",
    "ᶇ": "n",
    "ɳ": "n",
    "ꝋ": "o",
    "ꝍ": "o",
    "ⱺ": "o",
    "ɛ": "e",
    "ᶓ": "e",
    "ɔ": "o",
    "ᶗ": "o",
    "ꝓ": "p",
    "ƥ": "p",
    "ᵱ": "p",
    "ᶈ": "p",
    "ꝕ": "p",
    "ᵽ": "p",
    "ꝑ": "p",
    "ꝙ": "q",
    "ʠ": "q",
    "ɋ": "q",
    "ꝗ": "q",
    "ɾ": "r",
    "ᵳ": "r",
    "ɼ": "r",
    "ᵲ": "r",
    "ᶉ": "r",
    "ɍ": "r",
    "ɽ": "r",
    "ↄ": "c",
    "ꜿ": "c",
    "ɘ": "e",
    "ɿ": "r",
    "ʂ": "s",
    "ᵴ": "s",
    "ᶊ": "s",
    "ȿ": "s",
    "ɡ": "g",
    "ᴑ": "o",
    "ᴓ": "o",
    "ᴝ": "u",
    "ȶ": "t",
    "ⱦ": "t",
    "ƭ": "t",
    "ᵵ": "t",
    "ƫ": "t",
    "ʈ": "t",
    "ŧ": "t",
    "ɐ": "a",
    "ǝ": "e",
    "ᵷ": "g",
    "ɥ": "h",
    "ʮ": "h",
    "ʯ": "h",
    "ᴉ": "i",
    "ʞ": "k",
    "ꞁ": "l",
    "ɯ": "m",
    "ɰ": "m",
    "ɹ": "r",
    "ɻ": "r",
    "ɺ": "r",
    "ⱹ": "r",
    "ʇ": "t",
    "ʌ": "v",
    "ʍ": "w",
    "ʎ": "y",
    "ᶙ": "u",
    "ⱴ": "v",
    "ꝟ": "v",
    "ʋ": "v",
    "ᶌ": "v",
    "ⱱ": "v",
    "ⱳ": "w",
    "ᶍ": "x",
    "ƴ": "y",
    "ỿ": "y",
    "ɏ": "y",
    "ʑ": "z",
    "ⱬ": "z",
    "ȥ": "z",
    "ᵶ": "z",
    "ᶎ": "z",
    "ʐ": "z",
    "ƶ": "z",
    "ɀ": "z",
    "ₓ": "x",
} as { [str: string]: string };

export const transliteratesSameLengthsUpper = {
    "Ð": "D",
    "Ø": "O",
    "Đ": "D",
    "А": "A",
    "Б": "B",
    "В": "V",
    "Г": "G",
    "Д": "D",
    "Е": "E",
    "З": "Z",
    "И": "I",
    "Й": "J",
    "К": "K",
    "Л": "L",
    "М": "M",
    "Н": "N",
    "О": "O",
    "П": "P",
    "Р": "R",
    "С": "S",
    "Т": "T",
    "У": "U",
    "Ф": "F",
    "Х": "H",
    "Ы": "Y",
    "Э": "E",
    "Α": "A",
    "Β": "B",
    "Γ": "G",
    "Δ": "D",
    "Ε": "E",
    "Ζ": "Z",
    "Η": "I",
    "Ι": "I",
    "Κ": "K",
    "Λ": "L",
    "Μ": "M",
    "Ν": "N",
    "Ο": "O",
    "Π": "P",
    "Ρ": "R",
    "Σ": "S",
    "Τ": "T",
    "Υ": "Y",
    "Φ": "F",
    "Χ": "X",
    "Ω": "O",
    "Ά": "A",
    "Έ": "E",
    "Ί": "I",
    "Ό": "O",
    "Ύ": "Y",
    "Ή": "I",
    "Ώ": "O",
    "Ϊ": "I",
    "Ϋ": "Y",
    // "Тс": "Ts",
    "Ł": "L",
    "І": "I",
    "Ґ": "G",
    "Ё": "E",
    "Ќ": "K",
    "Ї": "I",
    "€": "E",
    "Ⱥ": "A",
    "Ɓ": "B",
    "Ƀ": "B",
    "Ƃ": "B",
    "Ƈ": "C",
    "Ȼ": "C",
    "Ɗ": "D",
    "ǲ": "D",
    "ǅ": "D",
    "Ƌ": "D",
    "Ɇ": "E",
    "Ƒ": "F",
    "Ɠ": "G",
    "Ǥ": "G",
    "Ⱨ": "H",
    "Ħ": "H",
    "Ɨ": "I",
    "Ꝺ": "D",
    "Ꝼ": "F",
    "Ᵹ": "G",
    "Ꞃ": "R",
    "Ꞅ": "S",
    "Ꞇ": "T",
    "Ɉ": "J",
    "Ⱪ": "K",
    "Ꝃ": "K",
    "Ƙ": "K",
    "Ꝁ": "K",
    "Ꝅ": "K",
    "Ƚ": "L",
    "Ⱡ": "L",
    "Ꝉ": "L",
    "Ŀ": "L",
    "Ɫ": "L",
    "ǈ": "L",
    "Ɱ": "M",
    "Ɲ": "N",
    "Ƞ": "N",
    "ǋ": "N",
    "Ꝋ": "O",
    "Ꝍ": "O",
    "Ɵ": "O",
    "Ɛ": "E",
    "Ɔ": "O",
    "Ꝓ": "P",
    "Ƥ": "P",
    "Ꝕ": "P",
    "Ᵽ": "P",
    "Ꝑ": "P",
    "Ꝙ": "Q",
    "Ꝗ": "Q",
    "Ɍ": "R",
    "Ɽ": "R",
    "Ꜿ": "C",
    "Ǝ": "E",
    "Ⱦ": "T",
    "Ƭ": "T",
    "Ʈ": "T",
    "Ŧ": "T",
    "Ɐ": "A",
    "Ꞁ": "L",
    "Ɯ": "M",
    "Ʌ": "V",
    "Ꝟ": "V",
    "Ʋ": "V",
    "Ⱳ": "W",
    "Ƴ": "Y",
    "Ỿ": "Y",
    "Ɏ": "Y",
    "Ⱬ": "Z",
    "Ȥ": "Z",
    "Ƶ": "Z",
    "ᴀ": "A",
    "ʙ": "B",
    "ᴃ": "B",
    "ᴄ": "C",
    "ᴅ": "D",
    "ᴇ": "E",
    "ꜰ": "F",
    "ɢ": "G",
    "ʛ": "G",
    "ʜ": "H",
    "ɪ": "I",
    "ʁ": "R",
    "ᴊ": "J",
    "ᴋ": "K",
    "ʟ": "L",
    "ᴌ": "L",
    "ᴍ": "M",
    "ɴ": "N",
    "ᴏ": "O",
    "ᴐ": "O",
    "ᴘ": "P",
    "ʀ": "R",
    "ᴎ": "N",
    "ᴙ": "R",
    "ꜱ": "S",
    "ᴛ": "T",
    "ⱻ": "E",
    "ᴚ": "R",
    "ᴜ": "U",
    "ᴠ": "V",
    "ᴡ": "W",
    "ʏ": "Y",
    "ᴢ": "Z",
} as { [str: string]: string };

export const transliteratesPureDiacriticsLower = {
    "à": "a",
    "á": "a",
    "â": "a",
    "ã": "a",
    "å": "a",
    "ç": "c",
    "è": "e",
    "é": "e",
    "ê": "e",
    "ë": "e",
    "ì": "i",
    "í": "i",
    "î": "i",
    "ï": "i",
    "ñ": "n",
    "ò": "o",
    "ó": "o",
    "ô": "o",
    "õ": "o",
    "ő": "o",
    "ù": "u",
    "ú": "u",
    "û": "u",
    "ű": "u",
    "ý": "y",
    "ÿ": "y",
    "ă": "a",
    "ĩ": "i",
    "ũ": "u",
    "ơ": "o",
    "ư": "u",
    "ạ": "a",
    "ả": "a",
    "ấ": "a",
    "ầ": "a",
    "ẩ": "a",
    "ẫ": "a",
    "ậ": "a",
    "ắ": "a",
    "ằ": "a",
    "ẳ": "a",
    "ẵ": "a",
    "ặ": "a",
    "ẹ": "e",
    "ẻ": "e",
    "ẽ": "e",
    "ế": "e",
    "ề": "e",
    "ể": "e",
    "ễ": "e",
    "ệ": "e",
    "ỉ": "i",
    "ị": "i",
    "ọ": "o",
    "ỏ": "o",
    "ố": "o",
    "ồ": "o",
    "ổ": "o",
    "ỗ": "o",
    "ộ": "o",
    "ớ": "o",
    "ờ": "o",
    "ở": "o",
    "ỡ": "o",
    "ợ": "o",
    "ụ": "u",
    "ủ": "u",
    "ứ": "u",
    "ừ": "u",
    "ử": "u",
    "ữ": "u",
    "ự": "u",
    "ỳ": "y",
    "ỵ": "y",
    "ỷ": "y",
    "ỹ": "y",
    "ș": "s",
    "ț": "t",
    "ţ": "t",
    "ş": "s",
    "ğ": "g",
    "č": "c",
    "ď": "d",
    "ě": "e",
    "ň": "n",
    "ř": "r",
    "š": "s",
    "ť": "t",
    "ů": "u",
    "ž": "z",
    "ā": "a",
    "ē": "e",
    "ģ": "g",
    "ī": "i",
    "ķ": "k",
    "ļ": "l",
    "ņ": "n",
    "ū": "u",
    "ą": "a",
    "ę": "e",
    "ė": "e",
    "į": "i",
    "ų": "u",
    "ć": "c",
    "ń": "n",
    "ś": "s",
    "ź": "z",
    "ż": "z",
    "ä": "a",
    "ö": "o",
    "ü": "u",
} as { [str: string]: string };

export const transliteratesPureDiacriticsUpper = {
    "À": "A",
    "Á": "A",
    "Â": "A",
    "Ã": "A",
    "Å": "A",
    "Ç": "C",
    "È": "E",
    "É": "E",
    "Ê": "E",
    "Ë": "E",
    "Ì": "I",
    "Í": "I",
    "Î": "I",
    "Ï": "I",
    "Ñ": "N",
    "Ò": "O",
    "Ó": "O",
    "Ô": "O",
    "Õ": "O",
    "Ő": "O",
    "Ù": "U",
    "Ú": "U",
    "Û": "U",
    "Ű": "U",
    "Ý": "Y",
    "Ă": "A",
    "Ĩ": "I",
    "Ũ": "U",
    "Ơ": "O",
    "Ư": "U",
    "Ạ": "A",
    "Ả": "A",
    "Ấ": "A",
    "Ầ": "A",
    "Ẩ": "A",
    "Ẫ": "A",
    "Ậ": "A",
    "Ắ": "A",
    "Ằ": "A",
    "Ẳ": "A",
    "Ẵ": "A",
    "Ặ": "A",
    "Ẹ": "E",
    "Ẻ": "E",
    "Ẽ": "E",
    "Ế": "E",
    "Ề": "E",
    "Ể": "E",
    "Ễ": "E",
    "Ệ": "E",
    "Ỉ": "I",
    "Ị": "I",
    "Ọ": "O",
    "Ỏ": "O",
    "Ố": "O",
    "Ồ": "O",
    "Ổ": "O",
    "Ỗ": "O",
    "Ộ": "O",
    "Ớ": "O",
    "Ờ": "O",
    "Ở": "O",
    "Ỡ": "O",
    "Ợ": "O",
    "Ụ": "U",
    "Ủ": "U",
    "Ứ": "U",
    "Ừ": "U",
    "Ử": "U",
    "Ữ": "U",
    "Ự": "U",
    "Ỳ": "Y",
    "Ỵ": "Y",
    "Ỷ": "Y",
    "Ỹ": "Y",
    "Ș": "S",
    "Ț": "T",
    "Ţ": "T",
    "Ş": "S",
    "Ğ": "G",
    "İ": "I",
    "Č": "C",
    "Ď": "D",
    "Ě": "E",
    "Ň": "N",
    "Ř": "R",
    "Š": "S",
    "Ť": "T",
    "Ů": "U",
    "Ž": "Z",
    "Ā": "A",
    "Ē": "E",
    "Ģ": "G",
    "Ī": "I",
    "Ķ": "K",
    "Ļ": "L",
    "Ņ": "N",
    "Ū": "U",
    "Ą": "A",
    "Ę": "E",
    "Ė": "E",
    "Į": "I",
    "Ų": "U",
    "Ć": "C",
    "Ń": "N",
    "Ś": "S",
    "Ź": "Z",
    "Ż": "Z",
    "Ä": "A",
    "Ö": "O",
    "Ü": "U",
} as { [str: string]: string };

export const transliteratesPureDiacriticsEXTRA = {
    "آ": "ا",
    "أ": "ا",
    "ؤ": "و",
    "إ": "ا",
    "ئ": "ي",
    "ۀ": "ە",
    "Й": "И",
    "й": "и",
    "ά": "α",
    "έ": "ε",
    "ί": "ι",
    "ό": "ο",
    "ύ": "υ",
    "ή": "η",
    "ώ": "ω",
    "ϊ": "ι",
    "ΰ": "υ",
    "ϋ": "υ",
    "ΐ": "ι",
    "Ά": "Α",
    "Έ": "Ε",
    "Ί": "Ι",
    "Ό": "Ο",
    "Ύ": "Υ",
    "Ή": "Η",
    "Ώ": "Ω",
    "Ϊ": "Ι",
    "Ϋ": "Υ",
    "Ё": "Е",
    "ё": "е",
    "Ќ": "К",
    "ќ": "к",
    "Ї": "І",
    "ї": "і",
} as { [str: string]: string };

// https://github.com/sindresorhus/transliterate/blob/f4a527f5e8fa6dc7c2142c3125b594cfa3f0d0c2/index.js#L58
// remove all remaining diacritics?
// .normalize('NFD').replaceAll(/\p{Diacritic}/gu, '').normalize();

// https://fr.wikipedia.org/wiki/%C5%92
// Œuf œuf oeuf
let _equivalentsList: Array<Set<string>> | undefined;
export const equivalents = () => {
    if (!_equivalentsList) {
        _equivalentsList = [];
        for (const obj of [transliteratesPureDiacriticsLower, transliteratesPureDiacriticsUpper,
            {
                "і": "i",
                "І": "I",
                "к": "К",
                "K": "К",
                "е": "e",
                "ε": "e",
                "Е": "E",
                "Ε": "E",
                "Έ": "E",
                "Α": "A",
                "Ο": "O",
                "ο": "o",
                "ά": "a",
                "к": "k",
                "ί": "i",
            },
            transliteratesSameLengths,
            // transliteratesSameLengthsLower,
            // transliteratesSameLengthsUpper,
            transliteratesPureDiacriticsEXTRA]) {
            for (const key of Object.keys(obj)) {
                const val = obj[key];
                if (key.length !== 1 || val.length !== 1) {
                    console.log("########## transliteration / diacritics / ligatures LENGTH NOK?! [" + key + "] [" + val + "]");
                }
                let foundEq: Set<string> | undefined;
                for (const equivalents of _equivalentsList) {
                    if (equivalents.has(key) || equivalents.has(key.toLowerCase())) {
                        foundEq = equivalents;
                        // console.log(">>> SET ADD 1 key: [" + key + "]");
                        equivalents.add(key);
                        if (!equivalents.has(val) || !equivalents.has(val.toLowerCase())) {
                            // console.log(">>> SET ADD 1 val: [" + val + "]");
                            equivalents.add(val);
                        }
                    }
                    if (equivalents.has(val) || equivalents.has(val.toLowerCase())) {
                        foundEq = equivalents;
                        // console.log(">>> SET ADD 2 val: [" + val + "]");
                        equivalents.add(val);
                        if (!equivalents.has(key) || !equivalents.has(key.toLowerCase())) {
                            // console.log(">>> SET ADD 2 key: [" + key + "]");
                            equivalents.add(key);
                        }
                    }
                    // if (foundEq) {
                    //     break;
                    // }
                }
                if (!foundEq) {
                    // console.log(">>> NEW SET: [" + key + "] [" + val + "]");
                    _equivalentsList.push(new Set<string>([key, val]));
                }
            }
        }

        const alreadySeen: string[] = [];
        let i = -1;
        for (const equivalents of _equivalentsList) {
            let str = "";
            for (const eq of equivalents) {
                if (alreadySeen.includes(eq)) {
                    console.log("-??? EQUIVALENTS already!?: [" + eq + "]");
                }
                alreadySeen.push(eq);
                str += eq;
            }
            console.log("-DIACRITICS EQUIVALENTS: [" + (++i) + "] [" + str + "]");
        }
    }
    return _equivalentsList;
};
